package cn.redis.util;


import lombok.Getter;
import lombok.Setter;

import java.util.concurrent.TimeUnit;

/**
 * redis的key的管理类
 * 这个类的存在意义是为了避免开发时因为不显式看到key，从而导致同名key覆盖和key命名不规范不好管理的问题
 *
 * @author yexi
 */
public enum RedisKeys {
    //
    Test("Test", 1L, TimeUnit.HOURS),
    JCKBH("JCKBH", 1L, TimeUnit.HOURS);

    @Setter
    private String prefix; // key的前缀
    @Setter
    @Getter
    private Long time;    //key有效时间,默认是秒

    @Setter
    @Getter
    private TimeUnit unit; //时间单位

    /**
     * 对应两个参数，所以给两个参数
     *
     * @param prefix 设定的key的前缀
     * @param time   设定的key的存活时间
     */
    RedisKeys(String prefix, Long time) {
        this.prefix = prefix;
        this.time = time;
        this.unit = TimeUnit.SECONDS;
    }

    RedisKeys(String prefix, Long time, TimeUnit unit) {
        this.prefix = prefix;
        this.time = time;
        this.unit = unit;
    }

    //返回最后要存入到redis里面的key
    public String join(String... values) {
        StringBuilder sb = new StringBuilder();
        sb.append(this.prefix);
        for (String value : values) {
            sb.append(":").append(value);
        }
        return sb.toString();
    }

}
